#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
#include <algorithm>
void testVector()
{
    // 创建一个空的 vector
    std::vector<int> vec;

    // 使用 push_back 添加元素
    vec.push_back(10);
    vec.push_back(20);
    vec.push_back(30);

    // 使用 emplace_back 添加元素（效率更高）
    vec.emplace_back(40);
    vec.emplace_back(50);

    auto it = std::find_if(vec.begin(), vec.end(),
                           [&](int &value)
                           { return value >= 30; });
    std::cout << "it=" << std::distance(vec.begin(), it) << std::endl;
    if (it != vec.end())
    {
        std::cout << "第一个找到的元素是: " << ",*it=" << *it << std::endl;
    }
    else
    {
        std::cout << "没有找到元素" << std::endl;
    }
    std::cout << "back 元素: " << vec.back() << std::endl;
    // 删除最后一个元素
    vec.pop_back();

    // 清空 vector
    vec.clear();

    // 插入元素
    vec.insert(vec.begin(), 5); // 在开头插入 5
    vec.push_back(0);
    vec.insert(vec.end(), 6); // 在末尾插入 6
    std::cout << "Elements after insert: ";
    for (int i : vec)
    {
        std::cout << i << " ";
    }
    std::cout << std::endl;

    // 删除元素
    vec.erase(vec.begin(), vec.begin() + 2); // 删除元素,前包含，后不包含
    std::cout << "Elements after erase: ";
    for (int i : vec)
    {
        std::cout << i << " ";
    }
    std::cout << std::endl;
}

class Node
{
public:
    int x, y;
    int g, h, f;
    Node *parent;

    // 构造函数
    Node(int x, int y, Node *parent, int g, int h)
        : x(x), y(y), parent(parent), g(g), h(h), f(g + h) {}

    // 析构函数
    ~Node()
    {
        std::cout << "Node destroyed." << std::endl;
    }
};
void test_unordered_map()
{
    std::cout << "\n -----------------test_unordered_map" << std::endl;
    std::unordered_map<int, Node *> node_map;
    node_map[1] = new Node(1, 1, nullptr, 1, 1);
    node_map[2] = new Node(2, 2, nullptr, 2, 2);
    // 访问元素
    std::cout << node_map[1]->x << ", " << node_map[1]->y << std::endl;
    // 遍历 方式一：迭代器遍历
    for (auto iter = node_map.begin(); iter != node_map.end(); iter++)
    {
        std::cout << iter->first << ": " << iter->second->x << ", " << iter->second->y << std::endl;
    }
    // 遍历 方式二：范围for循环
    for (const auto &pair : node_map)
    {
        std::cout << pair.first << ": " << pair.second->x << ", " << pair.second->y << std::endl;
    }
    node_map.erase(1); // 删除键为1的元素
    // 检测元素是否存在
    if (node_map.find(1) != node_map.end())
    {
        std::cout << "存在" << std::endl;
    }
    else
    {
        std::cout << "不存在" << std::endl;
    }
}
int main()
{
    testVector();

    test_unordered_map();

    return 0;
}